package in.rob.client; import in.lib.Constants; import in.lib.annotation.InjectView; import in.lib.utils.Dimension; import in.lib.utils.Views; import in.lib.view.JazzyViewPager; import in.lib.view.JazzyViewPager.TransitionEffect; import in.rob.client.base.RobinSlidingActivity; import in.rob.client.dialog.base.DialogBuilder; import in.rob.client.page.AdditionalSettingsPage; import in.rob.client.page.AppearanceSettingsPage; import in.rob.client.page.GeneralSettingsPage; import in.rob.client.page.NotificationSettingsPage; import in.rob.client.page.ProfileSettingsPage; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import lombok.Getter; import lombok.Setter; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.slidingmenu.lib.SlidingMenu; import com.viewpagerindicator.TitlePageIndicator; public class SettingsActivity extends RobinSlidingActivity { @InjectView(R.id.pager) public JazzyViewPager mViewPager; @Getter @Setter private boolean restartRequired = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); lockOrientation(); Views.inject(this); ((TextView)getSupportActionBar().getCustomView().findViewById(R.id.title)).setText(R.string.settings); } @Override public void setupForPhone() { setup(true); } @Override public void onClick(View v) { if (restartRequired) { showRestartDialog(); return; } super.onClick(v); } @Override public void onBackPressed() { if (restartRequired) { showRestartDialog(); return; } super.onBackPressed(); } public void showRestartDialog() { DialogBuilder.create(getContext()) .setTitle(R.string.restart_required_title) .setMessage(R.string.restart_required_desc) .setPositiveButton(R.string.yes, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } }) .setNegativeButton(R.string.no, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }) .show(); } @Override public void setup(boolean isPhone) { // Calculate the size for the sliding menu Dimension dimension = new Dimension(this); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { getSlidingMenu().setBehindWidth((int)dimension.getWidthFromRatio(100), SlidingMenu.LEFT); } else { getSlidingMenu().setBehindWidth((int)dimension.getWidthFromRatio(70), SlidingMenu.LEFT); } getSlidingMenu().setBehindScrollScale(0.2f, SlidingMenu.BOTH); getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); LinkedHashMap<Class, Bundle> pages = new LinkedHashMap<Class, Bundle>(5); Bundle b1 = new Bundle(); b1.putString(Constants.EXTRA_TITLE, getString(R.string.profile)); pages.put(ProfileSettingsPage.class, b1); Bundle b2 = new Bundle(); b2.putString(Constants.EXTRA_TITLE, getString(R.string.general)); pages.put(GeneralSettingsPage.class, b2); Bundle b5 = new Bundle(); b5.putString(Constants.EXTRA_TITLE, getString(R.string.notifications)); pages.put(NotificationSettingsPage.class, b5); Bundle b3 = new Bundle(); b3.putString(Constants.EXTRA_TITLE, getString(R.string.appearance)); pages.put(AppearanceSettingsPage.class, b3); Bundle b4 = new Bundle(); b4.putString(Constants.EXTRA_TITLE, getString(R.string.additional)); pages.put(AdditionalSettingsPage.class, b4); getViewPager().setAdapter(new TestFragmentAdapter(pages, getSupportFragmentManager())); //Bind the title indicator to the adapter TitlePageIndicator titleIndicator = (TitlePageIndicator)findViewById(R.id.titles); titleIndicator.setViewPager(getViewPager()); titleIndicator.setVisibility(View.VISIBLE); if (getIntent().getExtras() != null) { titleIndicator.setCurrentItem(getIntent().getExtras().getInt(Constants.EXTRA_START_PAGE, 1)); } else { titleIndicator.setCurrentItem(1); } ((JazzyViewPager)getViewPager()).setTransitionEffect(TransitionEffect.Standard); ViewGroup mIndicator = (ViewGroup)findViewById(R.id.indicator); mIndicator.setVisibility(View.GONE); } public void lockOrientation() { switch (getResources().getConfiguration().orientation) { case Configuration.ORIENTATION_PORTRAIT: if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.FROYO) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { int rotation = getWindowManager().getDefaultDisplay().getRotation(); if (rotation == android.view.Surface.ROTATION_90 || rotation == android.view.Surface.ROTATION_180) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } break; case Configuration.ORIENTATION_LANDSCAPE: if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.FROYO) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { int rotation = getWindowManager().getDefaultDisplay().getRotation(); if (rotation == android.view.Surface.ROTATION_0 || rotation == android.view.Surface.ROTATION_90) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } } break; } } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // menu button if (keyCode == KeyEvent.KEYCODE_MENU && !handledLongPress) { toggle(SlidingMenu.LEFT); return true; } handledLongPress = false; return super.onKeyUp(keyCode, event); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.empty, menu); return super.onCreateOptionsMenu(menu); } class TestFragmentAdapter extends FragmentPagerAdapter { private final List<String> mTitles; private final LinkedHashMap<Class, Bundle> mFragments; private final FragmentManager mFragmentManager; @Override public Object instantiateItem(ViewGroup container, final int position) { Object obj = super.instantiateItem(container, position); mViewPager.setObjectForPosition(obj, position); return obj; } public TestFragmentAdapter(LinkedHashMap<Class, Bundle> pages, FragmentManager fm) { super(fm); mFragments = pages; mFragmentManager = fm; mTitles = new ArrayList<String>(); Iterator<Class> i = mFragments.keySet().iterator(); while (i.hasNext()) { mTitles.add(mFragments.get(i.next()).getString(Constants.EXTRA_TITLE)); } } @Override public Fragment getItem(int position) { Class[] keys = mFragments.keySet().toArray(new Class[mFragments.size()]); return Fragment.instantiate(getContext(), keys[position].getName(), mFragments.get(keys[position])); } @Override public int getCount() { return mFragments.size(); } @Override public CharSequence getPageTitle(int position) { return mTitles.get(position).toUpperCase(); } } }